package com.r2coding.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

import java.io.Serializable;
import java.util.*;

import lombok.Data;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.util.CollectionUtils;

/**
 * 用户表
 * 
 * @author 98k灬
 * @email hk666zx@163.com
 * @date 2022-10-31 19:54:21
 */
@Data
@TableName("t_users")
public class UsersEntity implements Serializable, UserDetails {
	private static final long serialVersionUID = 1L;

	/**
	 * 
	 */
	@TableId
	private String id;

	/**
	 * 密码
	 */
	private String password;

	/**
	 * 用户名
	 */
	private String username;

	/**
	 * 手机号
	 */
	private String mobile;
	/**
	 * 昵称，媒体号
	 */
	private String nickname;
	/**
	 * 慕课号，类似头条号，抖音号，公众号，唯一标识，需要限制修改次数，比如终生1次，每年1次，每半年1次等，可以用于付费修改。
	 */
	private String imoocNum;
	/**
	 * 头像
	 */
	private String face;
	/**
	 * 性别 1:男  0:女  2:保密
	 */
	private Integer sex;
	/**
	 * 生日
	 */
	private Date birthday;
	/**
	 * 国家
	 */
	private String country;
	/**
	 * 省份
	 */
	private String province;
	/**
	 * 城市
	 */
	private String city;
	/**
	 * 区县
	 */
	private String district;
	/**
	 * 简介
	 */
	private String description;
	/**
	 * 个人介绍的背景图
	 */
	private String bgImg;
	/**
	 * 慕课号能否被修改，1：默认，可以修改；0，无法修改
	 */
	private Integer canImoocNumBeUpdated;
	/**
	 * 创建时间 创建时间
	 */
	private Date createdTime;
	/**
	 * 更新时间 更新时间
	 */
	private Date updatedTime;

	@TableField(exist = false)
	private List<String> permissions;

	@Override
	public Collection<? extends GrantedAuthority> getAuthorities() {
		Set<GrantedAuthority> authorities = new HashSet<>();
		if (!CollectionUtils.isEmpty(permissions)) {
			for (String permission : permissions) {
				authorities.add(new SimpleGrantedAuthority(permission));
			}
		}
		return authorities;
	}

	@Override
	public boolean isAccountNonExpired() {
		return true;
	}

	@Override
	public boolean isAccountNonLocked() {
		return true;
	}

	@Override
	public boolean isCredentialsNonExpired() {
		return true;
	}

	@Override
	public boolean isEnabled() {
		return true;
	}
}
